package giftmail.service;

import java.io.Serializable;

import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.Session;
import javax.jms.TextMessage;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.jms.core.MessageCreator;
import org.springframework.stereotype.Service;

@Service("producerService")
public class ProducerServiceImpl implements IProducerService {

	@Autowired
	private JmsTemplate jmsTemplate;

	@Autowired
	@Qualifier("responseQueue")
	private Destination responseDestination;

	/**
	 * 向Destination发送纯文本消息的方法sendMessage
	 */
	// public void sendMessage(Destination destination, final String message)
	// {
	// System.out.println("---------------生产者发送消息-----------------");
	// System.out.println("---------------生产者发了一个消息：" + obj);
	// jmsTemplate.send(destination, new MessageCreator() {
	// public Message createMessage(Session session) throws JMSException {
	// ObjectMessage objMessage = session.createObjectMessage(obj);
	// return objMessage;
	// }
	// });
	// }

	/**
	 * 在使用了MessageListenerAdapter时,除了会把java类当做MessageListener处理之外,还有一个功能是自动的发送返回消息
	 * 当我们用于处理接收到的消息的方法的返回值不为空的时候，Spring会自动将它封装为一个JMS Message，然后自动进行回复.那回复消息发送到哪里呢?
	 * 使用Message的setJMSReplyTo方法指定该消息对应的回复消息的目的地
	 */
	public void sendMessage(Destination destination, final String message) {
		System.out.println("---------------生产者发送消息-----------------");
		System.out.println("---------------生产者发了一个消息：" + message);
		jmsTemplate.send(destination, new MessageCreator() {
			public Message createMessage(Session session) throws JMSException {
				TextMessage textMessage = session.createTextMessage(message);
				textMessage.setJMSReplyTo(responseDestination);
				return textMessage;
			}
		});
	}

}
